// PROGRAMA : TABPE001
// OPCAO : 'E18' - emite tabela de usuarios
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : GEJUSPC - GERENCIA DA JUSTICA, SEGURANCA PUBLICA E
// CIDADANIA / INSTITUTO DE IDENTIFICACAO
// OBJETIVO : EMITIR TABELA de usuario
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Tabpe111Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabpe111A;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Tabpe111 OBJETIVO : EMITIR TABELA de usuario *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/tabpe111")
public class Tabpe111 {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Tabpe111A tabpe111A;
	Tabpe111Report report;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	Sisll001 sisll001 = new Sisll001();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Tabpe111 tabpe111Anterior;
	String faseproc = "0";
	private int cont = 0;
	// private String tabela = "";
	private String impressora = "";

	private Tabpe111A preMapas() throws ParseException {
		tabpe111A = new Tabpe111A(true, sessao);
		report.setDataCorrente(UtilBean.inverteDataCorrente());
		sessao.getSisgsisp().setVar(10);
		// Par�grafo: r0()
		return tabpe111A;
	}

	public Tabpe111(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Tabpe111A tabpe111A) {
		try {
			main(tabpe111A);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Tabpe111A ptabpe111A) throws ParseException, JRException, FileNotFoundException {
		if (ptabpe111A == null) {
			primeiraVez = true;
			tabpe111A = preMapas();
			tabpe111A.setNavegar("../tabpe111/executar");
			result.include("tabpe111A", tabpe111A);
			sessao.setAtributo("TABPE111", this);
			tabpe111A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(ptabpe111A);
		}

		// RELATORIO 1 PS=60 LS=133 SG=ON
		report = new Tabpe111Report();
		report.setPageSize(60);
		report.setLineSize(133);

		tabpe111A.receberTela(false, result);
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			tabpe111A.enviarMensagem(null, "");
			return;
		}
		if (!sessao.getSisgsisp().getOperacao().equals("e18")) {
			saidaExit();
		}
		if (report.getCodtab() == 0) {
			tabpe111A.enviarMensagem("codtab", "");
			return;
		}
		if (impressora.equals("SYSOUT")) {
			// DEFINE PRINTER(EFM = 1) OUTPUT 'SYSOUT'
		} else {
			if (impressora.trim().equals("")) {
				// DEFINE PRINTER(EFM = 1)
			} else {
				// DEFINE PRINTER(EFM = 1) OUTPUT IMPRESSORA
			}
		}
		report.setCodtab(888);
		funcoes.tabsemi(sessao);
		vwDvetab.consultaCodigoTabela(report.getCodtab());
		if (vwDvetab.totalRegistros() == 0) {
			tabpe111A.enviarMensagem("codtab", "");
			return;
		}

		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", report.getCodtab());
		vwDvetab.consultaTabele(888, (long) report.getCodtab());
		report.setTabela(vwTabele.getDescricaoElem());

		if (vwDvetab.registrosProcessados() == 0) {
			report.setTabela(StringUtils.repeat("*", 54));
		}
		while (vwDvetab.leituraTabdecMaiorig(0, "")) {
			// if (!tabpe111C.getUf().trim().equals("")) {
			// if (!(vwTabele.getChaveAlfaAcesso() == tabpe111C.getUf())) {
			// continue;
			// }
			// }
			relatorio();
			if (vwDvetab.quebraDintabcodtab()) {
				tabpe111A.setMensagemSaida("EMISSAO EFETUADA OK");
				break;
			}
		}

		while (vwDvetab.leituraTabeleMaiorig(888, 0L)) {
			// if (!tabpe111C.getUf().trim().equals("")) {
			// if (!(vwTabele.getChaveAlfaAcesso() == tabpe111C.getUf())) {
			// continue;
			// }
			// }
			// vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N",
			// 18);
			// vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12,
			// "N",vwTabele.getMatriculaFunc());
			if (vwDvetab.pesquisaTabele(18, (long) vwTabele.getMatriculaFunc())) {
				// 213
				report.setWnome(vwDvetab.getDescricaoElem());

			}
			relatorio();
			if (vwDvetab.quebraDintabcodtab()) {
				tabpe111A.setMensagemSaida("EMISSAO EFETUADA OK");
				break;
			}
		}
		report.imprimir();
		vwDvetab.pesq = "";
		sessao.setAtributo("TABPE111", this);
		result.include("tabpe111A", tabpe111A);
		if (!result.used()) {
			tabpe111A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		}
	}

	private void relatorio() throws JRException, ParseException {
		report.setDiatabDescel(vwTabele.getDescricaoElem());
		report.setDiatabGrupel(vwTabele.getGrupoElem());
		report.setDintabDatapo(vwTabele.getDataApoio());
		report.setDintabDatatu(vwTabele.getDataAtualizacao());
		report.setDintabMatfun(vwTabele.getMatriculaFunc());
		cont += 1;
		if (cont > 50) {

			// tabpe111B.enviarReceberTela(false, result);
			// // TABPE111
			cont = 0;
		}
		// RELATORIO
		report.gravaRelatorio(2);

		// RELATORIO
	}

	private void saidaExit() {
		funcoes.sissm001(result, sessao);
	}

	private void restaurarEstados(Tabpe111A ptabpe111A) {
		this.tabpe111Anterior = (Tabpe111) sessao.getAtributo("TABPE111");
		if (ptabpe111A != null) {
			tabpe111A = ptabpe111A;
		} else {
			tabpe111A = this.tabpe111Anterior.tabpe111A;
		}
		tabpe111A.setSessao(sessao);
		this.faseproc = this.tabpe111Anterior.faseproc;
	}
}
